home *** CD-ROM | disk | FTP | other *** search
/ Language/OS - Multiplatform Resource Library / LANGUAGE OS.iso / gnu / djgpp / merge.c < prev    next >
C/C++ Source or Header  |  1994-06-29  |  935b  |  64 lines

  1. #include <stdio.h>
  2. #include <fcntl.h>
  3.  
  4. #ifndef O_BINARY
  5. #define O_BINARY 0
  6. #endif
  7.  
  8. #define BUFS 16384
  9.  
  10. usage()
  11. {
  12.   fprintf(stderr,"Usage: merge [inputBase] [outputFile]\n");
  13.   fprintf(stderr, "reads <inputBase>.000, <inputBase>.001, etc\n");
  14.   exit(1);
  15. }
  16.  
  17. p_open(ob, p)
  18. char *ob;
  19. int p;
  20. {
  21.   char partname[1024];
  22.   sprintf(partname, "%s.%03d", ob, p);
  23.   return open(partname, O_RDONLY|O_BINARY);
  24. }
  25.  
  26. main(argc, argv)
  27. int argc;
  28. char **argv;
  29. {
  30.   char buf[BUFS];
  31.   long chunksize, r;
  32.   int partnum;
  33.   int outf, f;
  34.   
  35.   if (argc != 3)
  36.     usage();
  37.  
  38.   outf = open(argv[2], O_WRONLY|O_CREAT|O_TRUNC|O_BINARY, 0666);
  39.   if (outf < 0)
  40.     usage();
  41.  
  42.   partnum = 0;
  43.   f = p_open(argv[1], partnum);
  44.   while (1)
  45.   {
  46.     r = read(f, buf, BUFS);
  47.  
  48.     if (r <= 0)
  49.     {
  50.       close(f);
  51.       partnum++;
  52.       f = p_open(argv[1], partnum);
  53.  
  54.       if (f < 0)
  55.       {
  56.         close(outf);
  57.         exit(0);
  58.       }
  59.     }
  60.     
  61.     write(outf, buf, r);
  62.   }
  63. }
  64.